﻿//
// Created by Administrator on 2025/7/3.
//
#include <opencv2/opencv.hpp>
#include <opencv2/ximgproc.hpp>  // 细化算法头文件
#include <iostream>

int main()
{
    // 读取图像，灰度模式
    cv::Mat src = cv::imread("H:/DWORKPLACE/CWork/opencv/testimages/demo2.jpg", cv::IMREAD_GRAYSCALE);
    if (src.empty())
    {
        std::cerr << "无法读取图像文件！" << std::endl;
        return -1;
    }
    // 设置尺寸
    while (src.cols > 500 || src.rows > 500)
    {
        cv::resize(src, src, cv::Size(src.cols / 2, src.rows / 2));
    }

    // 二值化，确保输入是二值图像（0和255）
    cv::Mat bw;
    cv::threshold(src, bw, 128, 255, cv::THRESH_BINARY);

    // 细化输出图像
    cv::Mat thin_img;

    // 使用 ximgproc::thinning 细化图像
    // 参数：输入二值图像，输出图像，细化算法类型（Zhang-Suen 或 Guo-Hall）
    cv::ximgproc::thinning(bw, thin_img, cv::ximgproc::THINNING_ZHANGSUEN);

    // 显示结果
    cv::imshow("原始二值图", bw);
    cv::imshow("细化后骨架图", thin_img);

    cv::waitKey(0);
    return 0;
}
